home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / basic / chaosexe.zip / XCIRCLE.TRU < prev    next >
Text File  |  1980-01-01  |  5KB  |  157 lines

  1. !PROGRAM TITLE"XCIRCLE"
  2. LIBRARY "SGLIB.TRC"
  3.  
  4. DECLARE DEF CIRCLE
  5. DIM XINT(10),G(1),H(1)
  6. CLEAR
  7. PRINT"                       COMPREHENSIVE CIRCLE MAP PROGRAM"
  8. PRINT
  9. PRINT"CHOOSE ONE OF THE FOLLOWING OPTIONS FOR THE CIRCLE MAP:"
  10. PRINT" 1)RETURN MAP"
  11. PRINT" 2)BIFURCATION MAP"
  12. PRINT" 3)DEVIL'S STAIRCASE"
  13. INPUT PROMPT" CHOOSE 1,2,OR 3:":CHOICE
  14. CLEAR
  15. !
  16. CALL LINPUTS(CHOICE,XIN,XINT(),NUMXINT,KVALUE,INITK,FINK,STEPK,OMEGA,INITNUM,FINNUM,ORDER,XMIN,XMAX,YMIN,YMAX,TITLE1$,TITLE2$,VLABEL$,HLABEL$)
  17. !
  18. !GRAPHING SET-UP PROCEDURE
  19. CALL SETXSCALE(XMIN,XMAX)
  20. CALL SETYSCALE(YMIN,YMAX)
  21. CALL SETAXES(0)
  22. CALL SETTEXT(TITLE1$,HLABEL$,VLABEL$)
  23. CALL RESERVELEGEND
  24. DATA 0,0
  25. CALL DATAGRAPH(G,H,0,0,"WHITE")
  26. CALL GOTOCANVAS
  27. !
  28. IF CHOICE= 1 THEN CALL CALCULATION1(XIN,KVALUE,OMEGA,INITNUM,FINNUM,ORDER)
  29. IF CHOICE= 2 THEN CALL CALCULATION2(NUMXINT,XINT,INITK,FINK,STEPK,OMEGA,INITNUM,FINNUM)
  30. IF CHOICE= 3 THEN CALL CALCULATION3(XIN,INITNUM,FINNUM,INITK,FINK,STEPK,KVALUE)
  31. !
  32. SUB LINPUTS(CHOICE,XIN,XINT(),NUMXINT,KVALUE,INITK,FINK,STEPK,OMEGA,INITNUM,FINNUM,ORDER,XMIN,XMAX,YMIN,YMAX,TITLE1$,TITLE2$,VLABEL$,HLABEL$)
  33.     IF CHOICE=2 THEN
  34.        INPUT PROMPT"INPUT NUMBER OF INITIAL CONDITIONS:":NUMXINT
  35.        FOR J = 1 TO NUMXINT
  36.            INPUT PROMPT"INPUT AN INITIAL CONDITION:":XINT(J)
  37.        NEXT J
  38.     ELSE
  39.        INPUT PROMPT"INPUT INITIAL ANGLE, [0,1] :":XIN
  40.     END IF
  41.     IF CHOICE = 3 THEN
  42.        INPUT PROMPT"INPUT INITIAL VALUE OF OMEGA (TRY 0):":INITK
  43.        INPUT PROMPT"INPUT FINAL VALUE OF OMEGA (TRY 1):":FINK
  44.        LET STEPK=(FINK-INITK)/740
  45.        INPUT PROMPT"INPUT K VALUE (TRY 0.95):":KVALUE
  46.     ELSE IF CHOICE=2 THEN
  47.        INPUT PROMPT"INPUT INITIAL VALUE OF K:":INITK
  48.        INPUT PROMPT"INPUT FINAL VALUE OF K:":FINK
  49.        LET STEPK=(FINK-INITK)/740
  50.        INPUT PROMPT"INPUT OMEGA VALUE:":OMEGA
  51.     END IF
  52.     INPUT PROMPT"INPUT NUMBER OF THROWAWAY ITERATIONS:":INITNUM
  53.     INPUT PROMPT"INPUT TOTAL NUMBER OF ITERATIONS:":FINNUM
  54.     IF CHOICE = 1 THEN
  55.        INPUT PROMPT"INPUT ORDER OF MAP:":ORDER
  56.        INPUT PROMPT"INPUT OMEGA VALUE:":OMEGA
  57.        INPUT PROMPT"INPUT K-VALUE:":KVALUE
  58.        LET XMIN=0
  59.        LET XMAX=1
  60.        LET YMIN=0
  61.        LET YMAX=1
  62.        LET TITLE1$="CIRCLE MAP"
  63.        LET TITLE2$="K="&STR$(KVALUE)&"  OMEGA="&STR$(OMEGA)
  64.        LET VLABEL$="N+"&STR$(ORDER)&" ANGLE VALUE"
  65.        LET HLABEL$="N ANGLE VALUE"
  66.     END IF
  67.     IF CHOICE = 2 THEN
  68.        LET XMIN=INITK
  69.        LET XMAX=FINK
  70.        LET YMIN=0
  71.        LET YMAX=1
  72.        LET TITLE1$="CIRCLE MAP BIFURCATION DIAGRAM"
  73.        LET TITLE2$=""
  74.        LET VLABEL$="THETA"
  75.        LET HLABEL$="K-VALUE"
  76.     END IF
  77.     IF CHOICE=3 THEN
  78.        LET XMIN=INITK
  79.        LET XMAX=FINK
  80.        INPUT PROMPT"INPUT YMIN (USUALLY 0), AND YMAX (USUALLY 1):":YMIN,YMAX
  81.        LET TITLE1$="DEVIL'S STAIRCASE  (CIRCLE MAP)"
  82.        LET TITLE2$="DRIVE K="&STR$(KVALUE)
  83.        LET VLABEL$="WINDING #"
  84.        LET HLABEL$="OMEGA"
  85.     END IF
  86. END SUB
  87. !
  88. SUB CALCULATION1(XIN,KVALUE,OMEGA,INITNUM,FINNUM,ORDER)
  89.     PLOT LINES: 0,0;1,1           !PLOTS DIAGONAL
  90.     FOR I=O TO 1 STEP .001        !PLOTS CURVE
  91.         LET J=I
  92.         FOR ORD=1 TO ORDER
  93.  
  94.             LET Z=CIRCLE(J,KVALUE,OMEGA)
  95.             LET J=Z
  96.         NEXT ORD
  97.         PLOT I,Z
  98.     NEXT I
  99.     LET X=XIN
  100.     LET Y=0
  101.     IF INITNUM=O THEN PLOT X,0;
  102.     FOR I=1 TO FINNUM
  103.         LET J=X
  104.         FOR ORD=1 TO ORDER
  105.             LET Y=CIRCLE(J,KVALUE,OMEGA)
  106.             LET J=Y
  107.         NEXT ORD
  108.         IF I>=INITNUM THEN
  109.            PLOT X,Y;
  110.            PLOT Y,Y;
  111.         END IF
  112.         LET X=Y
  113.     NEXT I
  114. END SUB
  115. !
  116. SUB CALCULATION2(NUMXINT,XINT(),INITK,FINK,STEPK,OMEGA,INITNUM,FINNUM)
  117.     FOR KVAL=INITK TO FINK STEP STEPK
  118.         FOR K=1 TO NUMXINT
  119.             LET X=XINT(K)
  120.             FOR I=1 TO FINNUM
  121.                 LET Y=CIRCLE(X,KVAL,OMEGA)
  122.                 IF I>INITNUM THEN
  123.                    PLOT KVAL,Y
  124.                 END IF
  125.                 LET X=Y
  126.             NEXT I
  127.         NEXT K
  128.     NEXT KVAL
  129. END SUB
  130. !
  131. SUB CALCULATION3(XIN,INITNUM,FINNUM,INITOMEGA,FINOMEGA,STEPOMEGA,KVALUE)
  132.     FOR OMEGA=INITOMEGA TO FINOMEGA STEP STEPOMEGA
  133.         LET SUM=0
  134.         LET X=XIN
  135.         FOR I=1 TO FINNUM
  136.             LET Y=X+OMEGA-(KVALUE/(2*PI))*SIN(2*PI*X)
  137.             IF I=INITNUM THEN LET X0=Y
  138.             LET X=Y
  139.         NEXT I
  140.         LET WINDING=(Y-X0)/(FINNUM-INITNUM)
  141.         IF WINDING <=YMAX THEN
  142.            IF WINDING >=YMIN THEN
  143.               PLOT OMEGA,WINDING
  144.            END IF
  145.         END IF
  146.     NEXT OMEGA
  147. END SUB
  148. !
  149. DEF CIRCLE(X,KVALUE,OMEGA)
  150.     LET TEMPCIRCLE = X+OMEGA-(KVALUE/(2*PI))*SIN(2*PI*X)
  151.     LET CIRCLE = MOD(TEMPCIRCLE,1)
  152. END DEF
  153. GET KEY VARIABLE
  154. CLEAR
  155. PRINT "PRESS <ESC> FOR MENU"
  156. END
  157.